home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacWorld 1996 July
/
Macworld (1996-07).dmg
/
System Utils
/
CD Icon Killer
/
sources
/
TrapAvailable.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-10
|
1KB
|
39 lines
#include "TrapAvailable.h"
/* Code from Apple® converted by Stefan Kurth in super-optimized (!) C */
/* InitGraf is always implemented (trap $A86E). If the trap table is big
enough, trap $AA6E will always point to either Unimplemented or some other
trap, but will never be the same as InitGraf. Thus, you can check the size
of the trap table by asking if the address of trap $A86E is the same as
$AA6E. */
#define NumToolboxTraps ((GetToolTrapAddress(_InitGraf) == GetToolTrapAddress(0xAA6E)) ? 0x0200 : 0x0400)
/* Determines the type of a trap based on its trap number. If bit 11 is clear,
then it is an OS trap. Otherwise, it is a Toolbox trap. */
/* OS traps start with A0, Tool with A8 or AA. */
#define GetTrapType(which) (((which) & 0x0800) ? ToolTrap : OSTrap)
#define IsToolTrap(trap) ((trap) & 0x0800)
/* Check to see if a given trap is implemented. */
pascal Boolean TrapAvailable(short theTrap)
{
register UniversalProcPtr theTrapAddress;
register short temp;
temp = theTrap;
if(IsToolTrap(temp)) {
temp &= 0x07FF;
if( temp >= NumToolboxTraps)
return false;
theTrapAddress = GetToolTrapAddress(temp);
}
else
theTrapAddress = GetOSTrapAddress(temp);
return( GetToolTrapAddress(_Unimplemented) != theTrapAddress);
}